/*
 * @Author: your name
 * @Date: 2021-04-16 16:18:16
 * @LastEditTime: 2021-05-27 10:34:29
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \egg-demo\app\middleware\auth.js
 */
module.exports = (options, app) => {

  return async function (ctx, next) {
    let token = ctx.header.authorization ? ctx.header.authorization : '';
    // token.substring(7); // 去电'Bearer '字符串;解析的时候不需要;
    if (token) {
      try {
        // 从缓存中获取该token，如果存在继续执行代码，如果不存在或者存在超时，则返回信息await app.redis.set(data.username, token);
        // const catchToken = await app.redis.get()
        const decode = await app.jwt.verify(token, app.config.jwt.secret);
        ctx.state.user = decode;  // 将解析的信息挂载到cts.state.user对象
        await next();
      } catch (err) {
        ctx.helper.renderFail(ctx, { message: err, data: err })
      }
    } else {
      ctx.helper.renderFail(ctx, { message: 'token is not exit', data: { message: app.config.errorCode.NO_TOKEN } })
    }
  }
}
/* 
  name: auth;
  author: zzh; 1454758148@qq.com
  date: 2021-04-17
  desc: 解析前端请求中的header信息；header['Authorization'];
    如果token信息不存在，则返回信息 'token is not exit'; token解析失败（token失效）；
    则会返回失败信息。如果token存在且解析正常，则会将登录用户信息挂载到ctx.state.user对象上；

 */